Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Basic Combined Programming Language</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Basic_Combined_Programming_Language"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Basic_Combined_Programming_Language rootpage-Basic_Combined_Programming_Language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Basic Combined Programming Language</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><table class="float-right infobox toccolours toptextcells" style="font-size:90%; margin-top:0; width:21em;">

<tbody><tr>
<th colspan="2" class="hintergrundfarbe6" style="font-size:larger;">BCPL
</th></tr>




<tr>
<th colspan="2" class="hintergrundfarbe5" style="font-size:105%; text-align:center;">Basisdaten
</th></tr>
<tr>
<td><b><a href="Programmierparadigma" title="Programmierparadigma">Paradigmen</a>:</b>
</td>
<td><a href="Imperative_Programmierung" title="Imperative Programmierung">imperativ</a>, <a href="Strukturierte_Programmierung" title="Strukturierte Programmierung">strukturiert</a>
</td></tr>
<tr>
<td><b>Erscheinungsjahr:</b>
</td>
<td>1967
</td></tr>

<tr>
<td><b>Designer:</b>
</td>
<td><span class="wikidata-content"><a href="Martin_Richards_(Informatiker)" title="Martin Richards (Informatiker)">Martin Richards</a></span>
</td></tr>
<tr>
<td><b>Entwickler:</b>
</td>
<td>Martin Richards
</td></tr>




<tr>
<td><b><a href="Typisierung_(Informatik)" title="Typisierung (Informatik)">Typisierung</a>:</b>
</td>
<td>typenlos
</td></tr>






<tr>
<td><b>Beeinflusst von:</b>
</td>
<td><a href="Combined_Programming_Language" title="Combined Programming Language">CPL</a>
</td></tr>
<tr>
<td><b>Beeinflusste:</b>
</td>
<td><a href="B_(Programmiersprache)" title="B (Programmiersprache)">B</a>
</td></tr>





</tbody></table>
<p>Die <b>Basic Combined Programming Language</b> (<b>BCPL</b>) ist eine 1966 von <a href="Martin_Richards_(Informatiker)" title="Martin Richards (Informatiker)">Martin Richards</a> entwickelte und im Frühjahr 1967 am <a href="Massachusetts_Institute_of_Technology" title="Massachusetts Institute of Technology">Massachusetts Institute of Technology</a> zum ersten Mal implementierte, kompilierte, systemnahe <a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a>, abgeleitet von der Combined/Cambridge Programming Language <a href="Combined_Programming_Language" title="Combined Programming Language">CPL</a>. Es ist eine Sprache aus der <a href="ALGOL" title="ALGOL">ALGOL</a>-Familie. Eine Weiterentwicklung von BCPL war die Programmiersprache <a href="B_(Programmiersprache)" title="B (Programmiersprache)">B</a>, die wiederum die Basis für die Entwicklung der dauerhaft bedeutsamen Programmiersprache <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a> darstellte.
</p>

<div class="mw-heading mw-heading2"><h2 id="Allgemeine_Beschreibung">Allgemeine Beschreibung</h2></div>
<p>Vorteile von BCPL sind schnelle Erlernbarkeit, einfache <a href="Implementierung" title="Implementierung">Implementierung</a> und leichte Portierbarkeit. Es ist hauptsächlich gedacht zum <a href="Compilerbau" title="Compilerbau">Compilerbau</a>, zur <a href="Systemprogrammierung" title="Systemprogrammierung">Systemprogrammierung</a> und als „Pioniersprache“, also als erste Sprache für ein neues System.
</p><p>Ein BCPL-Programm besteht aus einzelnen Funktionen, die auch rekursiv definiert sein dürfen; der Funktionsaufruf erfolgt mit <a href="Wertparameter" title="Wertparameter">Wertparametern</a>.
</p><p>BCPL kennt als Datentyp nur das Wort, typischerweise mit der Wortbreite des Prozessors. Bezeichner verweisen auf Speicherzellen als <a href="Variable_(Programmierung)" title="Variable (Programmierung)">Variablen</a> oder Konstanten. Je nach Operator wird der Inhalt einer Speicherzelle oder das Ergebnis eines Ausdrucks als <a href="Ganze_Zahl" title="Ganze Zahl">Integralwert</a>, <a href="Referenzvariable" class="mw-redirect" title="Referenzvariable">Speicherreferenz</a>, <a href="Array_(Datentyp)" title="Array (Datentyp)">Vektor</a> oder <a href="Funktionszeiger" class="mw-redirect" title="Funktionszeiger">Eintrittspunkt einer Funktion</a> interpretiert, eine Typprüfung zur Kompile- oder Laufzeit findet nicht statt. Es gibt ausschließlich lokale Bezeichner sowie einen globalen Vektor, in dem im gesamten Programm sichtbare Bezeichner (insbesondere die Funktionsnamen) zusammengefasst sind.
</p><p>Bezeichner in und Ergebnisse von Ausdrücken werden abhängig von der Verwendung entweder als <a href="L-Wert_(Programmierung)" title="L-Wert (Programmierung)">L- oder R-Wert</a> interpretiert, z.&nbsp;B. in der Zuweisung l = r die Variable l als L-Wert (Speicheradresse) und die Variable r als R-Wert (Inhalt). Die Operatoren RV und LV erlauben es, die Interpretation umzukehren. RV X = LV Y z.&nbsp;B. speichert die Adresse von Y an die Stelle, auf die der Inhalt von X verweist.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>BCPL selbst stellt praktisch nur Funktionen zur Bit- und Wortmanipulation zur Verfügung. Alle anderen Funktionen sind in zusätzlichen Bibliotheken zusammengefasst.
</p><p><a href="Ken_Thompson" title="Ken Thompson">Ken Thompson</a> entwickelte 1969 die Sprache <a href="B_(Programmiersprache)" title="B (Programmiersprache)">B</a>, die stark von BCPL beeinflusst ist. Da B für die Interpretation auf einer <a href="PDP-7" title="PDP-7">PDP-7</a> mit 8&nbsp;kB <a href="Arbeitsspeicher" title="Arbeitsspeicher">RAM</a> entwickelt wurde, ist B einfacher aufgebaut als BCPL.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> Beispielsweise sind keine verschachtelten Funktionsdefinitionen möglich. Aus der Weiterentwicklung von B entstand die Programmiersprache <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a>.
</p><p>Es gibt BCPL-Implementierungen für praktisch jedes <a href="Betriebssystem" title="Betriebssystem">Betriebssystem</a>, die verschiedenen Implementierungen sind nicht quelltextkompatibel.
</p><p>Die BCPL-Philosophie wird durch folgendes Zitat aus dem nur auf Englisch verfügbaren Buch <i><a href="#Literatur">BCPL-The language and its compiler</a></i> illustriert:
</p>
<div class="Vorlage_Zitat" style="margin:1em 40px;">
<div style="margin:1em 0;"><blockquote lang="en" style="margin:0;">
<p>“The philosophy of BCPL is not one of the tyrant who thinks he knows best and lays down the law on what is and what is not allowed; rather, BCPL acts more as a servant offering his services to the best of his ability without complaint, even when confronted with apparent nonsense. The programmer is always assumed to know what he is doing and is not hemmed in by petty restrictions.”
</p>
</blockquote>
<blockquote style="margin:.5em 0 0 0;" lang="de-Latn">
<p>„Die BCPL-Philosophie ist nicht die des Tyrannen, der alles besser weiß und Regeln darüber erlässt, was erlaubt und was verboten ist. Stattdessen verhält sich BCPL mehr wie der Diener, der seine Dienste ohne Murren bestmöglich anbietet, auch wenn ihm augenscheinlicher Unsinn aufgetragen wird. Es wird stets vorausgesetzt, dass der Programmierer weiß, was er tut. Er wird daher nicht durch kleinkarierte Einschränkungen eingeengt.“
</p>
</blockquote></div><div class="cite" style="margin:-1em 0 1em 1em;">– <cite style="font-style:normal">BCPL-The language and its compiler</cite></div></div>
<div class="mw-heading mw-heading2"><h2 id="O-Code">O-Code</h2></div>
<p>Richards entwickelte in den späten 1960er Jahren einen <a href="Zwischencode" title="Zwischencode">Zwischencode</a>, der BCPL maschinenunabhängig machen sollte. Der BCPL-<a href="Compiler" title="Compiler">Compiler</a> erzeugt O-Code, wobei das O für Objekt, also <i>Objektcode</i> steht.
</p><p>Der O-Code kann dann von einem weiteren Programm entweder <a href="Interpreter" title="Interpreter">interpretiert</a> oder in spezifischen <a href="Maschinencode" class="mw-redirect" title="Maschinencode">Maschinencode</a> übersetzt werden. Diese Idee wurde und wird auch in neueren Compilern eingesetzt, z.&nbsp;B. in Form des RTL (Register Transfer Language)-Zwischencodes beim <a href="GNU_Compiler_Collection" title="GNU Compiler Collection">GCC</a> oder dem <a href="P-Code" title="P-Code">P-Code</a> von <a href="UCSD_Pascal" title="UCSD Pascal">UCSD Pascal</a>. <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> mit der <a href="Java_Virtual_Machine" title="Java Virtual Machine">Java Virtual Machine</a> verwendet ebenfalls einen eigenen Zwischencode, der allerdings irgendwo zwischen O-Code und Maschinencode liegt.
</p><p>O-Code erlaubt die Trennung von generellen und prozessorspezifischen Übersetzungsanforderungen. Die <a href="Portierung_(Software)" title="Portierung (Software)">Portierung</a> des BCPL-Compilers wurde durch seine Verwendung extrem erleichtert, und BCPL wurde schnell auf verschiedenen Maschinen verfügbar.
</p>
<div class="mw-heading mw-heading2"><h2 id="Programmbeispiel">Programmbeispiel</h2></div>
<div class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr"><pre><span></span>GET "LIBHDR"

LET START () BE
$(WRITES ("Hello, world!*N")
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Betriebssysteme">Betriebssysteme</h2></div>
<p>Teile des <a href="AmigaOS" title="AmigaOS">AmigaOS</a> (die Komponente AmigaDOS) basieren auf <a href="TRIPOS" title="TRIPOS">TRIPOS</a>, einem <a href="Mehrbenutzersystem" title="Mehrbenutzersystem">Mehrbenutzerbetriebssystem</a> der Firma <a href="MetaComCo" title="MetaComCo">MetaComCo</a>, das in der Programmiersprache BCPL entwickelt wurde, und tragen daher heute noch Spuren von BCPL. So enden beispielsweise BCPL-<a href="Zeiger_(Informatik)" title="Zeiger (Informatik)">Zeiger</a> in AmigaDOS-Datenstrukturen zwangsläufig auf 32-Bit-Grenzen, da sie um 2 Bit nach rechts verschoben sind, was einer Division durch 4 entspricht. Weiterhin werden in AmigaDOS oft Zeichenketten verwendet, die statt der in der Programmiersprache C üblichen Nullterminierung ein vorangestelltes Längenbyte verwenden.
</p><p>Ein ebenfalls in BCPL entwickeltes Betriebssystem der AEG (Systemsoftware-Abteilung Konstanz) für die eigenen Maschinen <a href="AEG_80_Prozessrechner" title="AEG 80 Prozessrechner">AEG 80-40</a> und AEG 80-60 (Stückzahl unter 100, um 1980) war <i>MARTOS</i> (Multi Access Real Time Operating System). Ebenfalls für diese nur in wenigen Projekten eingesetzten, damals eigentlich sehr modernen Maschinen, wurde die in BCPL implementierte, mit C und <a href="PL/I" title="PL/I">PL/I</a> verwandte Programmiersprache <b>SL3</b> (System Low Level Language) entwickelt, bei der man systemnah wie in Assembler einzelnen Variablen feste Register zuordnen, andererseits aber auch mit komplexen und geschachtelten Strukturen programmieren konnte.
</p>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>M. Richards, C. Whitby-Strevens: <cite style="font-style:italic">BCPL – the language and its compiler</cite>. Cambridge University Press, Cambridge 1980, ISBN 0-521-28681-6.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Basic+Combined+Programming+Language&amp;rft.au=M.+Richards%2C+C.+Whitby-Strevens&amp;rft.btitle=BCPL+-+the+language+and+its+compiler&amp;rft.date=1980&amp;rft.genre=book&amp;rft.isbn=0521286816&amp;rft.place=Cambridge&amp;rft.pub=Cambridge+University+Press" style="display:none">&nbsp;</span></li>
<li>Martin Richards: <cite style="font-style:italic">The Portability of the BCPL Compiler</cite>. In: <cite style="font-style:italic">Software – Practice and Experience</cite>. <span style="white-space:nowrap">Band<span style="display:inline-block;width:.2em">&nbsp;</span>1</span>, <span style="white-space:nowrap">Nr.<span style="display:inline-block;width:.2em">&nbsp;</span>2</span>, 1971, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>135–146</span>.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/de.wikipedia.org:Basic+Combined+Programming+Language&amp;rft.atitle=The+Portability+of+the+BCPL+Compiler&amp;rft.au=Martin+Richards&amp;rft.date=1971&amp;rft.genre=journal&amp;rft.issue=2&amp;rft.jtitle=Software+-+Practice+and+Experience&amp;rft.pages=135-146&amp;rft.volume=1" style="display:none">&nbsp;</span></li>
<li><a rel="nofollow" class="external text" href="http://www.cl.cam.ac.uk/~mr10/bcpl4raspi.pdf"><i>Young Persons Guide to BCPL Programming on the Raspberry Pi</i></a> (PDF; 9,7&nbsp;MB) Teil 1 und 2</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.cl.cam.ac.uk/~mr10/bcplman.pdf">The BCPL Cintcode and Cintcode User Guide by Martin Richards, 2007</a> (englisch; PDF; 933&nbsp;kB)</li>
<li><a rel="nofollow" class="external text" href="https://www.bell-labs.com/usr/dmr/www/bcpl.html">Martin Richards’s BCPL Reference Manual, 1967</a> (englisch)</li>
<li><a rel="nofollow" class="external text" href="http://www.cl.cam.ac.uk/~mr10/BCPL.html">Machine independent interpretive implementation of BCPL, free of charge for private and academic purposes</a> (englisch)</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">Henry Ancona (MIT): <a rel="nofollow" class="external text" href="http://www.bitsavers.org/pdf/mit/tx-2/TX-2_BCPL_Reference_Manual_May69.pdf"><i>The BCPL Reference Manual.</i></a> 6. Mai 1969.</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><a href="Dennis_Ritchie" title="Dennis Ritchie">Dennis Ritchie</a>: <cite style="font-style:italic">The Development of the C Language</cite>. In: <cite style="font-style:italic">History of Programming Languages</cite>. ACM Press and Addison-Wesley, New York 1996, ISBN 0-201-89502-1.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Basic+Combined+Programming+Language&amp;rft.atitle=The+Development+of+the+C+Language&amp;rft.au=Dennis+Ritchie&amp;rft.btitle=History+of+Programming+Languages&amp;rft.date=1996&amp;rft.genre=book&amp;rft.isbn=0201895021&amp;rft.place=New+York&amp;rft.pub=ACM+Press+and+Addison-Wesley" style="display:none">&nbsp;</span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-05-07" href="https://de.wikipedia.org/wiki/?title=Basic_Combined_Programming_Language&amp;oldid=255809636">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>